#pragma once

#include "Ciudad.h"
#include "AVL.h"
#include "ComparadorCiudadesPorNombre.h"

Ciudad::Ciudad(Cadena nombre)
{
	this->nombre = nombre;

	this->ciudadesAdyacentes = new AVL<Puntero<ICiudad>>(new ComparadorCiudadesPorNombre());

	this->promedioCalificaciones = 0;
	this->cantAtracciones = 0;
	this->calificaciones = 0;
}

Cadena Ciudad::ObtenerNombre() const
{
	return this->nombre;
}

bool Ciudad::operator==(const ICiudad& c) const
{
	return this == &c;
}

void Ciudad::AgregarCiudadAdyacente(const Puntero<ICiudad> &city)
{
	this->ciudadesAdyacentes->Insertar(city);	
}

Iterador<Puntero<ICiudad>> Ciudad::ObtenerAdyacentes() const
{
	return this->ciudadesAdyacentes->ObtenerIterador();

}

void Ciudad::ActualizarPromedio(const int &valor)
{
	calificaciones = calificaciones + valor;
	cantAtracciones = cantAtracciones + 1;
	this->promedioCalificaciones = calificaciones / cantAtracciones; 
}
	
int Ciudad::ObtenerPromedio() const
{
	return this->promedioCalificaciones; 
}

int Ciudad::ObtenerCalificaciones() const
{
	return calificaciones; 
}

int Ciudad::ObtenerCantAtracciones() const
{
	return this->cantAtracciones; 
}